

#if !defined(GPUBLAS_H_)
#define GPUBLAS_H_

#if defined(__cplusplus)
extern "C" {
#endif

// BLAS level one

__device__ __inline__ double gdasum ( int n, const double *dx, int incx );
__device__ __inline__ void gdaxpy ( int n, double da, const double *dx, int incx, double *dy, int incy );
__device__ __inline__ void gdcopy ( int n, const double *dx, int incx, double *dy, int incy );
__device__ __inline__ double gddot ( int n, const double *x, int incx, const double *y, int incy );
__device__ __inline__ double gdnrm2 ( int n, const double *dx, int incx );
__device__ __inline__ void gdrot ( int n, double *dx, int incx, double *dy, double c, double s );
__device__ __inline__ void gdrotg ( double *a, double *b, double *c, double *s );
__device__ __inline__ void gdrotm ( int n, double *dx, int incx, double *dy, int incy, const double *dparam );
__device__ __inline__ void gdrotmg ( double *d1, double *d2, double *b1, double b2, double *rparam );
__device__ __inline__ void gdscal ( int n, double da, double *dx, int incx );
__device__ __inline__ double gdsdot ( int n, const float *sx, int incx, const float *sy, int incy );
__device__ __inline__ void gdswap ( int n, double *dx, int incx, double *dy, int incy );
__device__ __inline__ int gidamax ( int n, const double *dx, int incx );

// BLAS level two

__device__ void gdgemvn ( int m, int n, double alpha, const double *a, int lda, 
                          const double *x, int incx, double beta, double *y, int incy );
                          
__device__ void gdgemvt ( int m, int n, double alpha, const double *a, int lda, 
                          const double *x, int incx, double beta, double *y, int incy );
                          
__device__ void gdger ( int m, int n, double alpha, const double *x, int incx, 
                        const double *y, int incy, double *A, int lda )

}